#ifndef __APP_BT_H__
#define __APP_BT_H__

#include "App_Device.h"
#include "App_Serial.h"
#include <unistd.h>

/**
 * @brief 蓝牙波特率
 * 
 */
typedef enum {
    BT_BR_9600 = '4',
    BT_BR_115200 = '8',
} BT_BR;

/**
 * @brief 蓝牙模块初始化
 * 1.将蓝牙的读后处理函数和写前处理函数传递给设备
 * 2.蓝牙连接初始化（暂未实现）
 * @param device 
 * @return int 0:成功 -1:失败
 */
int App_BT_Init(Device_t *device);

/**
 * @brief 蓝牙数据的读后处理
 * 
 * @param data 读取蓝牙的数据=>处理完成后放字符数组
 * @param datalen 读取蓝牙数据的长度
 * @return int 返回处理后字符数组的长度
 */
int App_BT_PostRead(char *data, int datalen);

/**
 * @brief 蓝牙数据写前处理
 * 
 * @param data 字符数组数据=>处理后放蓝牙数据
 * @param datalen 字符数组数据长度
 * @return int 处理后的蓝牙数据长度
 */
int App_BT_PreWrite(char *data, int datalen);

/**
 * @brief 等待蓝牙模块回复ACK
 * 
 * @param fd 串口文件描述符
 * @return int 0:成功 -1:失败
 */
int Wait_Ack(int fd);

/**
 * @brief 判断蓝牙连接状态
 * 
 * @param device 
 * @return int 0:未连接 1:已连接
 */
int App_BT_Status(Device_t *device);

/**
 * @brief 修改蓝牙名称
 * 
 * @param device 
 * @param name 
 * @return int 0:成功 -1:失败
 */
int App_BT_SetName(Device_t *device, char *name);

/**
 * @brief 修改蓝牙波特率
 * 
 * @param device 
 * @param baudRate 
 * @return int 0:成功 -1:失败
 */
int App_BT_SetBaudBate(Device_t *device, BT_BR baudRate);

/**
 * @brief 重启蓝牙模块
 * 
 * @param device 
 * @return int 0:成功 -1:失败
 */
int App_BT_Restart(Device_t *device);

/**
 * @brief 设置蓝牙的组网ID
 * 
 * @param device 
 * @param netId 
 * @return int 0:成功 -1:失败
 */
int App_BT_SetNetId(Device_t *device, char *netId);

/**
 * @brief 设置蓝牙的MAC地址
 * 
 * @param device 
 * @param maddr 
 * @return int 0:成功 -1:失败
 */
int App_BT_SetMaddr(Device_t *device, char *maddr);

#endif /* __APP_BT_H__ */
